package com.eupmt.lab3.utils;

import com.eupmt.lab3.exceptions.ClientNoExisteixException;
import org.apache.log4j.*;
import org.apache.log4j.Logger;

/**
 *
 * @author sony
 */
public class Log {
//public class MyClass {

    /* get a static logger instance with name
    com.foo.sampleapp.MyClass   */
    private static Logger myLogger = Logger.getLogger(Log.class.getName());
    private Appender myAppender;
    private SimpleLayout myLayout;

    // Constructors
    public Log() {
        //  Per defecte el nivell del Logger es posa a INFO
        myLogger.setLevel(Level.INFO);
        myLayout = new SimpleLayout();
        myAppender = new ConsoleAppender(myLayout);
        myLogger.addAppender(myAppender);
    }

    /*** Mètodes ***/
    /** Fa un log info per consola.
     *
     * @param missatge Missatge a mostrar pel log
     */
    public void infoLog(String missatge) {

//        System.out.println("prova: " + missatge);
        myLogger.setLevel(Level.INFO);
        if (missatge == null) {
            myLogger.info("El missatge està buit!");
        } else {
            myLogger.info(missatge);
        }
    }

    /** Fa un log error per consola.
     *
     * @param missatge Missatge a mostrar pel log
     */
    public void errorLog(String missatge) {

//        System.out.println("prova: " + missatge);
        myLogger.setLevel(Level.ERROR);
        if (missatge == null) {
            myLogger.error("El missatge està buit!");
        } else {
            myLogger.error(missatge);
        }
    }

    /** Fa un log debug per consola.
     *
     * @param missatge Missatge a mostrar pel log
     */
    public void debugLog(String missatge, Object obj) {

        myLogger.setLevel(Level.DEBUG);
        if (missatge == null) {
            myLogger.debug(obj, new ClientNoExisteixException());
        } else {
            myLogger.info(missatge);
            myLogger.debug(obj);
        }
    }

    /** Fa un log debug per consola.
     *
     * @param missatge Missatge a mostrar pel log
     */
    public void traceLog(Object missatge, Throwable throwed) {

        myLogger.setLevel(Level.TRACE);
        myLogger.trace(missatge, throwed);
//        myLogger.setLevel(Level.DEBUG);
//        if (missatge == null) {
//        }
//        else {
//            myLogger.info(missatge);
//            myLogger.debug(obj);
//        }
    }

    /**
     * @return the myLogger
     */
    public static Logger getMyLogger() {
        return myLogger;
    }

    /**
     * @param aMyLogger the myLogger to set
     */
    public static void setMyLogger(Logger aMyLogger) {
        myLogger = aMyLogger;
    }
}    // end class MyClas